home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / demos / fractals / mandelbrot2.s < prev    next >
Text File  |  1980-01-03  |  6KB  |  330 lines

  1.         section    TheCode,code
  2.  
  3.         bsr.w    TakeSystem
  4.  
  5.         lea    Bmap,a4
  6.         moveq    #0,d4
  7.         move.l    #-$8000000*2,a1
  8.         move.l    #100,a2
  9.         move.l    #8000,a3
  10.                     ;$1333333 each x
  11.                     ;$28f5c2 each y
  12.         move.l    #$199999,d1
  13.         move.l    #$28f5c2,d2
  14.         move.l    #319,d5
  15.         moveq    #$f,d6
  16.         moveq    #7,d7
  17.  
  18. yloop:        move.l    d5,d3
  19.         move.l    #$8000000*2,a0
  20.     
  21. xloop:        move.l    a2,d0
  22.  
  23.         movem.l    d1-d7/a2-a6,-(a7)
  24.         move.w    d0,d3
  25.         moveq    #0,d4        ; q1 = 0
  26.         moveq    #0,d5        ; q2 = 0
  27.         moveq    #0,d6        ; x  = 0
  28.         moveq    #0,d7        ; y  = 0
  29.         subq.w    #1,d3
  30.  
  31. mandelloop2:    move.l    d6,d1        ; D1 = oldx;
  32.         move.l    d4,d6
  33.         sub.l    d5,d6
  34.         add.l    a0,d6        ; x(D6) = q1(D4) - q2(D5) + acoo(A0);
  35.         move.l    d1,d2
  36.         bpl.b    Pos1
  37.         neg.l    d1
  38. Pos1:        eor.l    d7,d2
  39.         tst.l    d7
  40.         bpl.b    Pos2
  41.         neg.l    d7
  42. Pos2:        move.l    d1,d0
  43.         swap    d0
  44.         move.w    d0,d2
  45.         mulu    d7,d0
  46.         clr.w    d0
  47.         swap    d0
  48.         swap    d7
  49.         mulu    d7,d1
  50.         clr.w    d1
  51.         swap    d1
  52.         mulu    d2,d7
  53.         add.l    d0,d7
  54.         add.l    d1,d7
  55.         tst.l    d2
  56.         bpl.b    Pos3
  57.         neg.l    d7
  58. Pos3:        moveq    #6,d0
  59.         asl.l    d0,d7
  60.         add.l    a1,d7    ; y(D7) = 2 * oldx(D1) * y(D7) + bcoo(A1);
  61.         moveq    #5,d0
  62.         move.l    d7,d5
  63.         bpl.b    Pos4
  64.         neg.l    d5
  65. Pos4:        move.l    d5,d2
  66.         swap    d5
  67.         mulu    d5,d2
  68.         clr.w    d2
  69.         swap    d2
  70.         mulu    d5,d5
  71.         add.l    d2,d5
  72.         add.l    d2,d5
  73.         asl.l    d0,d5        ; q2(D4) = y(D7)^2;
  74.         bvs.b    mandelexit
  75.         move.l    d6,d4
  76.         bpl.b    Pos5
  77.         neg.l    d4
  78. Pos5:        move.l    d4,d2
  79.         swap    d4
  80.         mulu    d4,d2
  81.         clr.w    d2
  82.         swap    d2
  83.         mulu    d4,d4
  84.         add.l    d2,d4
  85.         add.l    d2,d4
  86.         asl.l    d0,d4        ; q1(D4) = x(D6)^2;
  87.         bvs.b    mandelexit
  88.         move.l    d4,d0
  89.         add.l    d5,d0
  90.         bvs.b    mandelexit
  91.         cmpi.l    #536870912,d0    ;$8000000 * 4
  92.         bgt.b    mandelexit
  93.         dbf    d3,mandelloop2
  94.  
  95.         moveq    #1,d3
  96. mandelexit:    subq.w    #1,d3
  97.         move.l    d3,d0
  98.         movem.l    (a7)+,d1-d7/a2-a6
  99.  
  100.         tst.w    d0
  101.         beq.b    nextx
  102.  
  103.         movem.l    d2-d4/a4,-(sp)    
  104.         move.l    d3,d2
  105.         lsr.w    #3,d3
  106.         add.w    d3,d4
  107.         and.w    d7,d2
  108.         eor.b    d6,d2
  109.         add.l    d4,a4
  110.  
  111.         lsr.w    d0
  112.         bcc.b    nobp0
  113.         bset.b    d2,(a4)
  114. nobp0:        add.w    a3,a4
  115.         lsr.w    d0
  116.         bcc.b    nobp1
  117.         bset.b    d2,(a4)
  118. nobp1:        add.w    a3,a4
  119.         lsr.w    d0
  120.         bcc.b    nobp2
  121.         bset.b    d2,(a4)
  122. nobp2:        add.w    a3,a4
  123.         lsr.w    d0
  124.         bcc.b    nobp3
  125.         bset.b    d2,(a4)
  126. nobp3:        add.w    a3,a4
  127.         lsr.w    d0
  128.         bcc.b    nobp4
  129.         bset.b    d2,(a4)
  130. nobp4:
  131. pix_err:    movem.l    (sp)+,d2-d4/a4
  132.  
  133. nextx:        sub.l    d1,a0
  134.         btst    #6,$bfe001
  135.         beq.b    Mousewait
  136.         dbra    d3,xloop
  137.  
  138. nexty:        add.l    d2,a1
  139.         add.w    #40,d4
  140.         cmpi.w    #(200*40),d4
  141.         blt.w    yloop
  142.     
  143. MouseWait:    btst    #6,$bfe001
  144.         bne.b    MouseWait
  145.  
  146.         bsr.b    RestoreSystem
  147.         rts                ; Done!
  148.  
  149. ***********************************************************
  150.  
  151. TakeSystem:    movea.l    4,a6            ; ExecBase
  152.         jsr    -$84(a6)        ; Forbid() multitasking
  153.  
  154.         lea    $dff000,a5        ; Custom chip base
  155.         bsr.b    InstallBmap
  156.         bsr.w    InstallSprites
  157.         bsr.w    InstallCopper
  158.         rts                ; Done
  159.  
  160. ***********************************************************
  161.  
  162. RestoreSystem:    lea    $dff000,a5
  163.  
  164.         movea.l    4,a6            ; ExecBase
  165.         lea    GraphicsName,a1        ; "graphics.library"
  166.         moveq.l    #0,d0            ; Any version
  167.         jsr    -$228(a6)        ; OpenLibrary()
  168.         move.l    d0,a1            ; Copy ptr to GfxBase
  169.         move.l    $26(a1),$80(a5)        ; Install old system copperlist
  170.         jsr    -$19e(a6)        ; CloseLibrary()
  171.         move.w     DMACONSave,$96(a5)    ; Activate old DMA channels
  172.         jsr    -$8a(a6)        ; Permit() multitasking
  173.         rts                ; Done
  174.  
  175. ***********************************************************
  176.  
  177. InstallBmap:    lea    bmapptrs,a0
  178.         move.l    #Bmap,d0        ; say our bmap address is $12345678
  179.         move.w    d0,6(a0)        ;   write $5678 to $e2 reg in copperlist
  180.         swap    d0
  181.         move.w    d0,2(a0)        ;   write $1234 to $e0
  182.         swap    d0
  183.     
  184.         add.l    #8000,d0
  185.         move.w    d0,14(a0)
  186.         swap    d0
  187.         move.w    d0,10(a0)
  188.         swap    d0
  189.     
  190.         add.l    #8000,d0
  191.         move.w    d0,22(a0)
  192.         swap    d0
  193.         move.w    d0,18(a0)
  194.         swap    d0
  195.     
  196.         add.l    #8000,d0
  197.         move.w    d0,30(a0)
  198.         swap    d0
  199.         move.w    d0,26(a0)
  200.         swap    d0
  201.     
  202.         add.l    #8000,d0
  203.         move.w    d0,38(a0)
  204.         swap    d0
  205.         move.w    d0,34(a0)
  206.  
  207.         rts
  208.  
  209. ***********************************************************
  210.  
  211. InstallCopper:    move.l    #Copper,$80(a5)        ; install copper
  212.         rts
  213.  
  214. *********************************************************** 
  215.  
  216. InstallSprites:    lea    sprptrs,a0
  217.         move.l    #NullSprite,d0      
  218.         move.w    d0,6(a0)    
  219.         move.w    d0,14(a0)
  220.         move.w    d0,22(a0)
  221.         move.w    d0,30(a0)
  222.         move.w    d0,38(a0)
  223.         move.w    d0,46(a0)
  224.         move.w    d0,54(a0)
  225.         move.w    d0,62(a0)
  226.         swap    d0  
  227.         move.w    d0,2(a0)    
  228.         move.w    d0,10(a0)
  229.         move.w    d0,18(a0)
  230.         move.w    d0,26(a0)
  231.         move.w    d0,34(a0)
  232.         move.w    d0,42(a0)
  233.         move.w    d0,50(a0)
  234.         move.w    d0,58(a0)
  235.         rts
  236.  
  237. ***********************************************************
  238.  
  239.         section    squid,data_c
  240.  
  241. GraphicsName:    dc.b    'graphics.library',0
  242.         EVEN
  243.  
  244. Copper:
  245.     dc.w    $1fc,0
  246.     dc.w    $106,$c40
  247.     dc.w    $0100,$5200         ; bit plane control reg.0
  248.     dc.w    $0102,$0000         ; scroll value
  249.     dc.w    $0104,$0000         ; blp/sprite priority reg.
  250.     dc.w    $0108,$0000         ; odd bitplane modulo value
  251.     dc.w    $010a,$0000         ; even bitplane modulo value
  252.     dc.w    $0180,$0000
  253.     dc.w    $0182,$0100
  254.     dc.w    $0184,$0200
  255.     dc.w    $0186,$0300
  256.     dc.w    $0188,$0400
  257.     dc.w    $018a,$0500
  258.     dc.w    $018c,$0600
  259.     dc.w    $018e,$0700
  260.     dc.w    $0190,$0800
  261.     dc.w    $0192,$0900
  262.     dc.w    $0194,$0a00
  263.     dc.w    $0196,$0b00
  264.     dc.w    $0198,$0c00
  265.     dc.w    $019a,$0d00
  266.     dc.w    $019c,$0e00
  267.     dc.w    $019e,$0f00
  268.     dc.w    $01a0,$0fb0
  269.     dc.w    $01a2,$0001
  270.     dc.w    $01a4,$0002
  271.     dc.w    $01a6,$0003
  272.     dc.w    $01a8,$0004
  273.     dc.w    $01aa,$0005
  274.     dc.w    $01ac,$0006
  275.     dc.w    $01ae,$0007
  276.     dc.w    $01b0,$0008
  277.     dc.w    $01b2,$0009
  278.     dc.w    $01b4,$000a
  279.     dc.w    $01b6,$000b
  280.     dc.w    $01b8,$000c
  281.     dc.w    $01ba,$000d
  282.     dc.w    $01bc,$000e
  283.     dc.w    $01be,$000f
  284.  
  285.     dc.w    $008e,$2c81         ; upper left corner of disp. window
  286.     dc.w    $0090,$f4c1         ; lower right corner of disp. window
  287.     dc.w    $0092,$0038         ; start of bpl. (horizontal)
  288.     dc.w    $0094,$00d0         ; endo of bpl. (horizontal)
  289. bmapptrs:
  290.     dc.w    $00e0,$0000         ; adr of bplane 1 (long - 2 words)
  291.     dc.w    $00e2,$0000         ; low word of bplane 1 adr
  292.     dc.w    $00e4,$0000
  293.     dc.w    $00e6,$0000
  294.     dc.w    $00e8,$0000
  295.     dc.w    $00ea,$0000
  296.     dc.w    $00ec,$0000
  297.     dc.w    $00ee,$0000
  298.     dc.w    $00f0,$0000
  299.     dc.w    $00f2,$0000
  300. sprptrs:
  301.     dc.w    $0120,$0000
  302.     dc.w    $0122,$0000
  303.     dc.w    $0124,$0000
  304.     dc.w    $0126,$0000
  305.     dc.w    $0128,$0000
  306.     dc.w    $012a,$0000
  307.     dc.w    $012c,$0000
  308.     dc.w    $012e,$0000
  309.     dc.w    $0130,$0000
  310.     dc.w    $0132,$0000
  311.     dc.w    $0134,$0000
  312.     dc.w    $0136,$0000
  313.     dc.w    $0138,$0000
  314.     dc.w    $013a,$0000
  315.     dc.w    $013c,$0000
  316.     dc.w    $013e,$0000
  317.  
  318.     dc.w    $ffff,$fffe
  319.  
  320. Bmap:    dcb.b    8000*5,0
  321.  
  322. ***********************************************************
  323.  
  324.     section farb,bss_c
  325.  
  326. NullSprite:    ds.l    3    ; 2 control words/2 data words/2 blank words
  327. DMACONSave:    ds.w    1
  328. INTENASave:    ds.w    1
  329. Level3Save:    ds.l    1
  330.